/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestorvideoclub;

/**
 *
 * @author JAVA
 */
import gestorvideoclub.enumeraciones.*;
import gestorvideoclub.jdbc.UsuarioJDBC;
import gestorvideoclub.util.*;
import java.util.*;
import java.io.*;

/*creamos variables privadas para esta clase*/
public class Usuario {

    private int id;
    private String nombre;
    private String apellidos;
    private String DNI;
    private String contrasenya;
    private Date FechaAlta;
    private Date FechaBaja;
    private String telefono;
    private EstadoUsuario estadoUsuario;
    private Rol rol;

    /* constructor por defecto*/
    public Usuario() {
    }

    /* constructor por parametros*/
    public Usuario(String nombre, String apellidos, String DNI, String contrasenya, String telefono, Rol rol) {

        this.nombre = nombre;
        this.apellidos = apellidos;
        this.DNI = DNI;
        this.contrasenya = contrasenya;
        this.FechaAlta = new Date();//Este hay que cambiarlo
        this.FechaBaja = new Date();
        this.telefono = telefono;
        this.rol = rol;
        estadoUsuario = EstadoUsuario.Alta;

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    
    public String getDNI() {
        return DNI;
    }

    public void setDNI(String DNI) {
        this.DNI = DNI;
    }

    public EstadoUsuario getEstadoUsuario() {
        return estadoUsuario;
    }

    public void setEstadoUsuario(EstadoUsuario estadoUsuario) {
        this.estadoUsuario = estadoUsuario;
    }

    public Date getFechaAlta() {
        return FechaAlta;
    }

    public void setFechaAlta(Date FechaAlta) {
        this.FechaAlta = FechaAlta;
    }

    public Date getFechaBaja() {
        return FechaBaja;
    }

    public void setFechaBaja(Date FechaBaja) {
        this.FechaBaja = FechaBaja;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getContrasenya() {
        return contrasenya;
    }

    public void setContrasenya(String contrasenya) {
        this.contrasenya = contrasenya;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public Rol getRol() {
        return rol;
    }

    public void setRol(Rol rol) {
        this.rol = rol;
    }

    /* Sobreescribir to String*/
    @Override
    public String toString() {

        String cad = "\nNombre y apellidos: "+this.getNombre()+" "+this.getApellidos();
        cad += "\nDNI: "+this.getDNI()+"\nTeléfono "+this.getTelefono();
        cad += "\nFecha de alta del usuario: "+UtilFecha.fechaMostrar(this.getFechaAlta());
        
        if(!this.getFechaBaja().equals(new Date (0))){
            cad += "\nFecha de Baja: "+UtilFecha.fechaMostrar(this.getFechaBaja());
        }

        cad += "\nEstado: "+this.getEstadoUsuario();
        cad += "\n";
        
        return cad;



              

    }
    /* Creamos a un usuario*/


    /* Cambiamos el estado del usuario a baja nunca se da de baja*/
        public  void altaUsuario(){
        String text;

        //Usuario usuario = new Usuario();

        System.out.println("Alta de un nuevo usuario");

        boolean correcto = false;
        do{
            System.out.println("Introduzca el nombre: ");
            text = introduceDatos.introduceString();
            if(text != null){
                this.setNombre(text);
                correcto = true;
            }
        }while(!correcto);

        correcto = false;

        do{
            System.out.println("Introduzca los apellidos: ");
            text = introduceDatos.introduceString();
            if(text!=null){
                this.setApellidos(text);
                correcto = true;
            }
        }while(!correcto);


        correcto = false;
        do{
            System.out.println("Introduzca el dni: ");
            text = introduceDatos.introduceString();
            if(text!= null){
                this.setDNI(text);
                correcto = true;
            }
        }while(!correcto);

        this.setFechaBaja(new Date(0));
        
        correcto = false;
        do{
            System.out.println("Introduzca la contraseña(debe tener 4 dígitos) :");
            text = introduceDatos.introduceString();
            if(text!=null){
                if(text.length()==4){
                    this.setContrasenya(text);
                    correcto = true;
                }
                else{
                    System.out.println("La contraseña debe tener un tamaño de 4 dígitos");
                }
            }
        }while(!correcto);


       correcto = false;
       this.setFechaAlta(new Date());

       do{
            System.out.println("Introduzca telefono: ");
            text = introduceDatos.introduceString();
            if(text!=null){
                this.setTelefono(text);
                correcto = true;
            }
       }while(!correcto);

       
       this.setEstadoUsuario(EstadoUsuario.Alta);

       correcto = false;
       do{
            System.out.println("\n¿Está seguro de quiere dar de alta al nuevo usuario?");
            System.out.println(this);
            System.out.println("Seleccione el número de la opción");
            System.out.println("1. Sí");
            System.out.println("2. No");
            int opcion = introduceDatos.introduceEntero();
            switch(opcion){
                case 1:
                    if(!UsuarioJDBC.existeUsuarioRol(this.getDNI(), this.getRol())){
                        UsuarioJDBC.insertarUsuario(this);
                    }
                    else{
                        System.out.println("El usuario ya existe");
                    }
                    correcto = true;
                    break;
                case 2:
                   System.out.println("No se han guardado los datos");
                   correcto = true;
                    break;
                default:
                    System.out.println("Opción incorrecta");
            }
       }while(!correcto);

    }

    /**
     * Este método cambiará el estado del usuario
     * @param estado será en nuevo estado
     */
    public void cambiarEstadoUsuario(String estado) {
        if(estado.equals("Baja")){
            this.setEstadoUsuario(EstadoUsuario.Baja);
            this.setFechaBaja(new Date());
        }else{
            this.setEstadoUsuario(EstadoUsuario.Alta);
            this.setFechaBaja(new Date(0));
        }
        UsuarioJDBC.modificarEstado(this);
        System.out.println(this);
    }

    /**
     * Este método dará la posibilidad al usuario
     * de sobreescribir su contraseña
     */
    public void cambiarContrasenya(){

        boolean correcto = false;
        do{
            System.out.println("Introduzca la contraseña");
            String text = introduceDatos.introduceString();
            System.out.println("Introduzca nuevamente la contraseña");

            if(text.equals(introduceDatos.introduceString())){
                correcto = true;
                UsuarioJDBC.modificarContrasenya(this, text);
                System.out.println("La contraseña se ha modificado correctamente");
            }
            else{
                System.out.println("Las contraseñas no son iguales");
            }
        }while(!correcto);
    }

    public static Usuario consultaUsuarioTienda(){
        System.out.print(">>> Usuario: ");
        String text = introduceDatos.introduceString();
        Usuario usuario = new Usuario();
        if(text.length()<=8)
        {
            usuario = UsuarioJDBC.obtenerUsuarioPorDni(text);
        }
        return usuario;
    }

}
